#include <iostream>
#include <stdlib.h>
#include <fstream>
#include "Circulo.h"
using namespace std;

/** \file Circulo.cc
* \brief Procedimientos de la clase Circulo.
*
* JAVIER ANTON DIAZ DNI:48629698Q
* STANISLAV LITVINENKO DNI:02062226T
*/


Circulo::Circulo( Coordenada pcentro, float pradio,int grosor, Color fondo, Color linea):Figura2D(pcentro,grosor,fondo,linea) 
{
	//centro = pcentro;
	if( pradio < 0.0 )
	{
		throw ExcepcionValorNoValido(pradio, "ExcepcionValorNoValido: el radio debe ser positivo");
	}
	else
	{
		radio = pradio;
	}
}


Circulo::Circulo( const Circulo &c)
{
	Figura2D::operator=(c);
	radio = c.radio;
}


Circulo::~Circulo()
{
	radio = 0;
}


Circulo&
Circulo::operator =( const Circulo& c)
{
	if( this != &c)
	{
		radio = c.radio;
		Figura2D::operator=(c);
	}

	return *this;
}


Coordenada
Circulo::getCentro() const
{
	//return centro;
	return Figura2D::getOrigen();
}


float
Circulo::getRadio() const
{
	return radio;
}

void
Circulo::setRadio( float pradio )
{
	if ( pradio < 0.0 )
	{
		throw ExcepcionValorNoValido(pradio, "ExcepcionValorNoValido: el radio debe ser positivo");
	}
	else
	{
		radio = pradio;
	}
}


void Circulo::pintar(ostream& os) const
{
	os << "<circle cx=\"" << Figura2D::getOrigen().getX() << "\" cy=\"" << Figura2D::getOrigen().getY() << "\" r=\"" << radio << "\"" << endl;
	Figura2D::pintar(os);
	os<<" />";

	os << endl;
}

void
Circulo::leeEntrada(istream& is){

	Figura2D::leeEntrada(is);

	float rad;
	
	is >> rad;

	setRadio(rad);
}

Circulo*
Circulo::clonar() const
{	/*
	Circulo* aux = new Circulo(radio);
	aux->setGrosorLinea(getGrosorLinea());
	aux->setFondo(getFondo());
	aux->setLinea(getLinea());
	*/
	Circulo* aux = new Circulo(*this); //No deja hacer getAgrupada
	return aux;
}

void 
Circulo::escalar(float porcentaje)
{
	try
	{
		if(porcentaje > 0)
		{
			radio=radio*(porcentaje/100);
		}
		else
		{
			throw ExcepcionValorNoValido(porcentaje, "ExcepcionValorNoValido: el porcentaje debe ser positivo");
		}
	}
	catch ( ExcepcionValorNoValido &e)
	{
		cerr << e.what();
	}
}

ostream& operator<<(ostream& os, const Circulo& c)
{
	c.pintar(os);

	return os;
}
